home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / Menu.h < prev    next >
C/C++ Source or Header  |  1990-11-28  |  4KB  |  153 lines

  1. #ifndef Menu_First
  2. #ifdef __GNUG__
  3. #pragma once
  4. #endif
  5. #define Menu_First
  6.  
  7. #include "CollView.h"
  8. #include "LineItem.h"
  9. #include "VObjectPair.h"
  10. #include "BorderItems.h"
  11.  
  12. //---- MenuItem ----------------------------------------------------------------
  13.  
  14. class MenuItem : public VObjectPair {
  15.     class Menu *nextMenu;
  16.     short subid, lastxpos, enterxpos;
  17. public:
  18.     MetaDef(MenuItem);
  19.     MenuItem(int id= cIdNone, VObject *v= 0, class Menu *nm= 0);
  20.     ~MenuItem();
  21.  
  22.     void SetContainer(VObject *v);
  23.     Menu *ContMenu()
  24.     { return nextMenu; }
  25.     void Enable(bool b= TRUE, bool redraw= TRUE);
  26.     VObject *Detect(BoolFun find, void *arg);
  27.     void *Hit();
  28.     virtual void DoOnItem(int, VObject*, Point);
  29.     ostream& PrintOn (ostream&);
  30.     istream& ReadFrom(istream&);
  31.     void Parts(Collection*);
  32. };
  33.  
  34. //---- MenuLineItem -----------------------------------------------------------------
  35.  
  36. class MenuLineItem : public LineItem {
  37. public:
  38.     MetaDef(MenuLineItem);
  39.     MenuLineItem();
  40.     void Enable(bool, bool);
  41. };
  42.  
  43. //---- Menu --------------------------------------------------------------------
  44.  
  45. enum MenuOptions {
  46.     eMenuTitle      = BIT(eCVLast+1),       // show title
  47.     eMenuIsNew      = BIT(eCVLast+2),
  48.     eMenuDelTitle   = BIT(eCVLast+3),
  49.     eMenuNoScroll   = BIT(eCVLast+4),
  50.     eMenuDefault    = eMenuTitle,
  51.     eMenuLast       = eCVLast + 4
  52. };
  53.  
  54. class Menu : public CollectionView {
  55.     static int level;
  56.     VObject *title;
  57.     int selection;
  58. protected:
  59.     class BlankWin *window;
  60.     class Clipper *clipper;
  61.  
  62.     void InsertVItems(int atId, bool before, char *first, va_list ap);
  63.  
  64. public:
  65.     MetaDef(Menu);
  66.     Menu(char *t, bool s= FALSE, int r= 0, int c= 1, bool st= TRUE);
  67.     Menu(VObject *t, bool s= FALSE, int r= 0, int c= 1, bool st= TRUE);
  68.     ~Menu();
  69.  
  70.     //---- initialize
  71.     void Init(VObject *t, bool s, bool st);
  72.  
  73.     //---- misc
  74.     bool IsNew()
  75.     { return TestFlag(eMenuIsNew); }
  76.     VObject *GetTitle()
  77.     { return title; }
  78.     void Update();
  79.     void InspectorId(char *buf, int sz);
  80.  
  81.     //---- show/hide
  82.     virtual int Show(Point, VObject *v= 0);
  83.     virtual Point InitialPos();
  84.     void Close();
  85.  
  86.     //---- submenues
  87.     void AppendMenu(Menu*, int id= 999);
  88.  
  89.     //---- inserting items
  90.     void Insert(VObject*);
  91.     void InsertBefore(int id, VObject*);
  92.     void InsertAfter(int id, VObject*);
  93.     void InsertItemBefore(int atId, char *, int myId);
  94.     void InsertItemAfter(int atId, char *, int myId);
  95.     void InsertItemsBefore(int atId, ...);
  96.     void InsertItemsAfter(int atId, ...);
  97.     void InsertItem(char*, int);
  98.     VObject *MakeMenuItem(char *s, int id);
  99.  
  100.     //---- adding items
  101.     void Append(VObject*);
  102.     void AppendItem(char*, int);
  103.     void AppendItems(char *, ...);
  104.  
  105.     //---- replacing items
  106.     void ReplaceItem(int id, char *label);
  107.     void ToggleItem(int id, bool toggle, char *toggleTrue, char *toggleFalse);
  108.     void ToggleItem(int id, bool toggle, char *fmt, char *toggleTrue, char *toggleFalse);
  109.  
  110.     //---- removing items
  111.     VObject *RemoveItem(int id);
  112.     void RemoveAllItems(bool free= TRUE);
  113.     
  114.     //---- enable/disable items
  115.     void EnableItem(int, bool b= TRUE);
  116.     void EnableItems(int id, ...);
  117.     void DisableAll();
  118.     void DisableItem(int id)
  119.     { EnableItem(id, FALSE); }
  120.  
  121.     //---- set selected item
  122.     int GetSelectedId()
  123.     { return selection; }
  124.     void SetSelectedItem(int);
  125.  
  126.     //---- handling input
  127.     void DoSelect2(Rectangle, int clicks);
  128.     void DoOnItem(int, VObject*, Point);
  129.  
  130.     //---- find items
  131.     VObject *Detect(BoolFun find, void *arg);
  132.     Menu *FindMenuItem(int);
  133.  
  134.     //---- input/output
  135.     ostream& PrintOn (ostream&);
  136.     istream& ReadFrom(istream&);
  137. };
  138.  
  139. //---- ShadowBorderItem --------------------------------------------------------
  140.  
  141. class ShadowBorderItem: public AbstractBorderItem {
  142. public:
  143.     MetaDef(ShadowBorderItem);
  144.     
  145.     ShadowBorderItem(VObject *title, VObject *inner, int shadow= 5);
  146.     ShadowBorderItem(char *title, VObject *inner, int shadow= 5);
  147.     ShadowBorderItem(VObject *inner, int shadow= 5);
  148.     
  149.     void Draw(Rectangle);
  150. };
  151.  
  152. #endif Menu_First
  153.